前回同様、今回も test_scores.xlsx のデータを使う
## # A tibble: 6 x 5
## クラス 名前 数学 英語 国語
## <chr> <chr> <dbl> <dbl> <dbl>
## 1 C 安藤 67 78 45
## 2 A 藤村 55 73 72
## 3 B 大泉 47 55 73
## 4 B 木村 78 71 85
## 5 A 鈴井 51 74 61
## 6 C 望月 79 84 75
グラフの描画で役立つパッケージを紹介する
{ggplot2}というグラフの描画用パッケージは綺麗なグラフを描くことができる。
ggplotは次のように2つ以上の手順をとり,2つ以上の関数を+でつなげていき,レイヤーを重ねるように描画していく。
ggplot(データフレーム, aes(x, y)))geom_histogram()などgeom_なんたらという関数)※R Studio Cloudで図を描くとき、タイトルや軸タイトルに日本語を使うと文字化けしてしまう。したがって、英語やローマ字を使うか、日本語を使いたい場合はパソコンにRとR Studioをインストールして使用する必要がある。(2019.4.22時点)
# パッケージ読み込み
library(tidyverse) # ggplot2もtidyverseパッケージに含まれている
# 棒グラフをつくり,gに代入する
g <- ggplot(df, aes(x = クラス)) + # dfのデータでキャンバスを作る
geom_bar() # キャンバスに棒グラフgeom_bar()を重ねる
g # 表示{plotly}パッケージは動的なグラフ(マウスを乗せると情報が表示されたりするグラフ)を描くことができる。
ggplotly()関数を使うと,{ggplot2}で描いたグラフを動的なものに変換できる。
※R Studio Cloudでpgglotyを使うと、日本語表示がggplot2そのものよりも適切に表示されることがあるが、完完璧ではない。(2019.4.22時点)
データの分布を要約するための指標(要約統計量)の代表的なものが平均(mean)と分散(variance)である。
\[ \bar{x} = \frac{1}{n}\sum_{i=1}^n x_i \]
\[ \sigma^2=\frac{1}{n}\sum_{i=1}^{n}(x_i-\bar{x})^2 \]
ただし,Rのvar()関数の算出する値は、母集団の分散(母分散)の不偏推定量としての分散すなわち不偏分散である。
\[ s^2=\frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2 \]
## [1] 333.1481
分散の単位は元の単位の2乗であるため,それを元の単位に戻すために平方根をとったものが標準偏差(standard deviation)である。
## [1] 18.25234
summary()関数は,データフレームの各行に関する代表値などの情報を取得することができる関数である。
## クラス 名前 数学 英語
## Length:40 Length:40 Min. : 42.00 Min. :42.00
## Class :character Class :character 1st Qu.: 51.75 1st Qu.:50.75
## Mode :character Mode :character Median : 65.00 Median :65.50
## Mean : 66.58 Mean :68.33
## 3rd Qu.: 80.50 3rd Qu.:82.25
## Max. :100.00 Max. :99.00
## 国語
## Min. : 40.00
## 1st Qu.: 51.00
## Median : 67.50
## Mean : 66.88
## 3rd Qu.: 79.50
## Max. :100.00
「クラス」と「名前」は文字列(character)型なので,Length(行数,標本数)が40であることくらいしか表示されない。
「英語」「国語」「数学」は整数(integer)型なので,代表値などの要約統計量(summary statistics)が表示されている。
それぞれの統計量の意味は
Min.が最小値1st Qu.が第一四分位数(1st quantile):「データを小さいものから順に並べた時に標本数の4分の1の位置(下位25%)にくる値」Medianが中央値(median):「データを小さい順に並べた時に標本数の2分の1の位置にくる値」Meanが平均値(mean):「データの総計をデータの個数で割ったもの」\(\sum_{i=1}^n x_i/n\)3rd Qu.が第三四分位数(3rd quantile):「データを小さい順に並べた時に標本数の4分の3の位置(75%)にくる値」Max.が最大値である。これらのうちMean以外の5つの統計量をまとめて五数要約という。
平均値は外れ値(極端に高かったり低かったりする値)の影響を受けやすいため,これらの統計量を見ることで,中央値と平均値が大きく異なるデータは外れ値があったりデータの分布に歪みがあることが推測できるわけである。
相関係数(correlation coefficient)は2つの量的変数の直線的な関係の強さを測るもので,次の式で定義される
\[ \begin{align} x\text{と}y\text{の相関係数}r &= \frac{x\text{と}y\text{の共分散}}{x\text{の標準偏差}\times y\text{の標準偏差}} \\ &= \frac{\frac{1}{n} \sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})} {\sqrt{\frac{1}{n} \sum_{i=1}^n (x_i - \bar{x})^2} \sqrt{\frac{1}{n} \sum_{i=1}^n (y_i - \bar{y})^2}} \end{align} \]
Rではcor()で計算できる。相関係数は-1から+1の範囲の値をとり,絶対値で1に近いほど関係が強いことを示す。
## [1] 0.160109
相関係数が入った行列を相関行列という
## 数学 英語 国語
## 数学 1.000000 0.16010896 0.22593799
## 英語 0.160109 1.00000000 0.04096556
## 国語 0.225938 0.04096556 1.00000000
ヒストグラムは量的変数の分布を確認するには極めて有用なグラフである。
R本体の機能でヒストグラムを描く場合はhist()を使う
2変数でグラフを描く場合,キャンバスにx(グラフ横軸)とy(グラフ縦軸)の両方を指定する。
そして散布図を描く場合はgeom_point()を+でつなげればよい
折れ線グラフはgeom_line()で描くことができる。
Excelで言うところの「マーカー付き折れ線グラフ」にしたい場合はgeom_point()を重ねればよい。
上では説明の簡単のため散布図と同じデータを使ったが,折れ線グラフは本来は時系列データに使うのが望ましい。
そこで,以下ではRにあらかじめ収録されている練習用のデータセットのひとつであるlongleyを使った例をのせる。
このデータは1947~62年のアメリカのGNPや雇用者数などが収録されている(詳細はhelpを参照してほしい)。
## GNP.deflator GNP Unemployed Armed.Forces Population Year Employed
## 1947 83.0 234.289 235.6 159.0 107.608 1947 60.323
## 1948 88.5 259.426 232.5 145.6 108.632 1948 61.122
## 1949 88.2 258.054 368.2 161.6 109.773 1949 60.171
## 1950 89.5 284.599 335.1 165.0 110.929 1950 61.187
## 1951 96.2 328.975 209.9 309.9 112.075 1951 63.221
## 1952 98.1 346.999 193.2 359.4 113.270 1952 63.639
ggplot(longley, aes(x = Year, y = GNP))+
geom_line()+ # 折れ線
geom_point()+ # マーカー
labs(title = "1947~62年のアメリカのGNP")箱ひげ図は五数要約の統計量(最小値,第一四分位数,中央値,第三四分位数,最大値)をプロットすることで分布の概形を表示する図である。
バイオリンプロットは、「カーネル密度推定」という手法で推定されたデータ分布の曲線を左右対称に描いたもので、異なるデータの分布を視覚的に比較できる。デフォルトでは最小値から最大値の範囲でプロットされ、geom_violin(trim = FALSE)にすると曲線の端はカットされない。
ggplot()関数の中に入れるaes()関数のfillやcolorといった引数に質的変数を指定することで,色の塗り分けによる層別化ができる。
これにより3つ目の変数の情報を表現できる。
ggplot(df, aes(x = 英語, y = 国語, fill = クラス, color = クラス))+
geom_point()+
labs(title = "英語と国語の得点の散布図をクラスごとに塗り分けたもの")